package com.xscd.polymorphism;

public class PolymorphismTest1 {
    /*
    * 多态的前提：
    *       1.有继承/实现关系
    *       2.有方法重写
    *       3.有父类引用指向子类对象
    *
    * 对象多态：
    *  //对象多态：左右两边的类型不一样，左边是父类的引用，右边是子类对象
        Animal a1 = new Dog();
        *
        *   //Animal a = new Dog();
        //Animal a = new Cat();
        *
        * 好处：方法的形参定义为父类类型，这个方法就可以接收到该父类的任意子类对象了
        *
    * 行为多态：
    *
    *好处：同一个方法，具有多种不同的表现形式，或者形态的能力
    * */
    public static void main(String[] args) {
        //对象多态：左右两边的类型不一样，左边是父类的引用，右边是子类对象
        Animal a1 = new Dog();

        useAnimal(new Dog());
        useAnimal(new Cat());

    }

    public static void useAnimal(Animal a) {
        //Animal a = new Dog();
        //Animal a = new Cat();
        a.eat();//往里面传入不同的对象就会有不同的表现形式

    }

}


abstract class Animal {
    public abstract void eat();

}

class Dog extends Animal {

    @Override
    public void eat() {
        System.out.println("狗吃猫");
    }
}

class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
